/*
 * 收货地址等和用户相关的数据存储文件
 */

export default {
  namespaced: true,
  
  // 数据源
  state: () => ({
    token: uni.getStorageSync('token') || '',
    address: JSON.parse(uni.getStorageSync('address') || '{}'), // 收货地址
    userInfo: JSON.parse(uni.getStorageSync('userinfo') || '{}'), // 用户信息
    redirectInfo: {} // 接收重定向的地址
  }),
  
  // 更改数据源的位置
  mutations: {
    // 更新重定向地址的对象
    updateRedirectInfo (state, pageInfo) {
      // 将当前页面的信息赋值给 redirectInfo
      state.redirectInfo = pageInfo
    },
    
    // 更新收货地址
    updateAddress (state, address) {
      state.address = address
      
      this.commit('m_user/saveAddressToStorage')
    },
    
    // 将收货地址存储化存储到本地
    saveAddressToStorage (state) {
      uni.setStorageSync('address', JSON.stringify(state.address))
    },
    
    // 将用户信息存储到 state 中
    updateUserInfo (state, userInfo) {
      state.userInfo = userInfo
      
      this.commit('m_user/saveUserInfoToStorage')
    },
    
    // 将用户的信息持久化存储到本地
    saveUserInfoToStorage (state) {
      uni.setStorageSync('userinfo', JSON.stringify(state.userInfo))
    },
  
    // 将 Token 存储到 state 中
    // updateToken (state, token) {
    //   state.token = token
      
    //   this.commit('m_user/saveTokenToStorage')
    // },
    
    // 将 Token 持久化存储到本地
    // saveTokenToStorage (state) {
    //   uni.setStorageSync('token', state.token)
    // }
  },
  
  // 格式化数据
  getters: {
    // 将收货地址抽取为 getters，方便在各个页面之间实现复用
    addressStr (state) {
      if (JSON.stringify(state.address) === '{}') return
      // 通过解构赋值取到详细的收货地址
      const {province, city, area, address, contact, phone} = state.address
      // 将解构出来的 省、市、区、详细地址 进行拼接并返回
      return province + city + area + address 
    }
  }
}
